/**
 * Copyright (C) 2011 KingCore Science & Technology CO,.LTD. All rights reserved.
 * XNS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

/**
 * Copyright (C) 2002-2011 WUZEWEN. All rights reserved.
 * WUZEWEN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 * This software is the confidential and proprietary information of
 * WuZeven, Personal. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with WuZeven.
 */

package com.kingcore.director.core.util;

import java.io.File;

import org.apache.log4j.Logger;

/**
 * <p>java class file describe</p>
 * @author Zeven on 2011-3-3
 * @version	1.0
 * @see		Object#equals(java.lang.Object)
 * @since	JDK5
 */

public class DirectorFileUtils {

	//log object
	private final static Logger log = Logger.getLogger(DirectorFileUtils.class);

	/**
	 * <p>
	 * 	// cmd /c start dir 会打开一个新窗口后执行dir指令，原窗口会关闭。  打开图片文件是有问题
	 * 	// cmd /k start dir 会打开一个新窗口后执行dir指令，原窗口不会关闭。
	 * </p>
	 * @author Zeven on 2009-5-6
	 * @param fileUrl
	 * @param param
	 */
	public static void openFileQuietly(String fileUrl ){
		doOpenFile(fileUrl, null ,"/c");
	}
	
	/**
	 * 打开文件所在目录，并选中文件。
	 * @param fileUrl
	 */
	public static void openFileLocationQuietly(String fileUrl ){ 
		try {
			String url= fileUrl;
			if (url==null) {
				return ;
			}
			File f = new File(fileUrl);
			if(!f.exists()){
				return ;
			}
			openFileQuietly( f.getParent() );

			//下面的命令方式报错
//			url = url.trim();
//			StringBuffer command = new StringBuffer();
//			command.append("explorer /n,/select, " + url );
//			log.info("url="+url);
//			log.info("exe:"+command.toString());
//			Runtime.getRuntime().exec(command.toString());

		} catch (Exception ex) {
			ex.printStackTrace();
		} 
	}
	
	/**
	 * <p>
	 * 	// cmd /c start dir 会打开一个新窗口后执行dir指令，原窗口会关闭。  打开图片文件是有问题
	 * 	// cmd /k start dir 会打开一个新窗口后执行dir指令，原窗口不会关闭。
	 * </p>
	 * @author Zeven on 2009-5-6
	 * @param fileUrl
	 * @param param
	 */
	public static void openFile(String fileUrl ,String params){
		doOpenFile(fileUrl, params, "/k");
	}
	
	public static void openFile(String fileUrl ){
		openFile(fileUrl ,null);
	}

	/**
	 * <p>java method describe</p>
	 * @author Zeven on 2009-5-6
	 * @param fileUrl
	 * @param param
	 */
	private static void doOpenFile(String fileUrl, String fileParams, String param ){ 
		try {
			String url= fileUrl;
			if (url==null) {
				return ;
			}
			// 这里判断可执行文件类型、执行文件等，可以看有无第三方的工具包如apache，
			//     自己做可以采用接口来做，做到支持不同的OS平台。 --wzw
			url = url.trim();
			//start后面加一对空引号，意味着设置title参数为空，然后后面的filepath被正确解释文件路径了。
			// 这里判断可执行文件类型、执行文件等，可以看有无第三方的工具包如apache，
			//     自己做可以采用接口来做，做到支持不同的OS平台。 --wzw
			//start后面加一对空引号，意味着设置title参数为空，然后后面的filepath被正确解释文件路径了。
			// cmd /c start dir 会打开一个新窗口后执行dir指令，原窗口会关闭。  打开图片文件是有问题
			// cmd /k start dir 会打开一个新窗口后执行dir指令，原窗口不会关闭。
			// 指定当前目录： cmd /c start /D"D:\Tomcat5.0\bin\" startup.bat, OK, 问题成功解决.
			StringBuffer command = new StringBuffer();
			command.append("cmd ")
				.append( param )
				.append(" start \" \"");
			log.info("url="+url);
			if (url.toLowerCase().endsWith(".bat")
					||url.toLowerCase().endsWith(".cmd")
					||url.toLowerCase().endsWith(".exe") ) {
				int pos = url.lastIndexOf(File.separator);  //File.separator
				if (pos<0) {
					pos = url.lastIndexOf("/");
				}
				command.append(" /D\""+ url.substring(0,pos) +"\"");
			}
			command.append(" \""+url+"\"");
			if(fileParams!=null){
				command.append(" \""+fileParams+"\"");   //打开程序or文件的参数，不是cmd的参数
			}
			log.info("exe:"+command.toString());
			Runtime.getRuntime().exec(command.toString());
		} catch (Exception ex) {
			ex.printStackTrace();
		} 
	}
	

	/** 
	 * 删除目录（文件夹）以及目录下的文件 
	 * @param   sPath 被删除目录的文件路径 
	 * @return  目录删除成功返回true，否则返回false 
	 */  
	public static boolean deleteDirectory(String sPath) {  
	    //如果sPath不以文件分隔符结尾，自动添加文件分隔符  
	    if (!sPath.endsWith(File.separator)) {  
	        sPath = sPath + File.separator;  
	    }  
	    File dirFile = new File(sPath);  
	    //如果dir对应的文件不存在，或者不是一个目录，则退出  
	    if (!dirFile.exists() || !dirFile.isDirectory()) {  
	        return false;  
	    }  
	    boolean flag = true;  
	    //删除文件夹下的所有文件(包括子目录)  
	    File[] files = dirFile.listFiles();  
	    for (int i = 0; i < files.length; i++) {  
	        //删除子文件  
	        if (files[i].isFile()) {  
	            flag = deleteFile(files[i].getAbsolutePath());  
	            if (!flag) break;  
	        } //删除子目录  
	        else {  
	            flag = deleteDirectory(files[i].getAbsolutePath());  
	            if (!flag) break;  
	        }  
	    }  
	    if (!flag) return false;  
	    //删除当前目录  
	    if (dirFile.delete()) {  
	        return true;  
	    } else {  
	        return false;  
	    }  
	}  
	/** 
	 * 删除单个文件 
	 * @param   sPath    被删除文件的文件名 
	 * @return 单个文件删除成功返回true，否则返回false 
	 */  
	public static boolean deleteFile(String sPath) {  
	   boolean flag = false;  
	   File file = new File(sPath);  
	    // 路径为文件且不为空则进行删除  
	    if (file.isFile() && file.exists()) {  
	        file.delete();  
	        flag = true;  
	    }  
	    return flag;
	}
	
	/**
	 * <p>java method describe</p>
	 * @author Zeven on 2011-3-3
	 * @param args
	 */
	public static void main(String[] args) {
//		String str = "WZW_Documents\ResourceIndex\P\System_Tool\copy_Favorites_to_ResourceIndex.bat";
		System.out.println("");

	}

}
